// overloading dell'operatore +

#include <iostream>
using namespace std;

class loc {
	int longitude, latitude;
public:
	loc() {} // necessario per costruire valori temporanei
	loc(int lg, int lt) {
		longitude = lg;
		latitude = lt;
	}

	void show() {
		cout << longitude << "  ";
		cout << latitude << "\n";
	}

	loc operator+(loc op2);
};

// Overloading di + per loc

// operator+ ha un solo parametro anche se esegue l'overloading dell'operatore
// binario +, questo è perchè l'operatore sul lato sinistro del +
// viene passato implicitamente alla funzione utilizzando il puntatore this
// l'operando a destra di + viene passato nel parametro op2
// in questo caso è l'oggetto a sinisrtra a generare la chiamata alla
// funzione membro operator

loc loc::operator+(loc op2)
{
	loc temp;

	temp.longitude = op2.longitude + longitude;
	temp.latitude = op2.latitude + latitude;

	return temp;
}

int main()
{
	loc ob1(10, 20), ob2(5, 30);

	ob1.show();	// visualizza 10 20
	ob2.show();	// visualizza 5 30

	ob1 = ob1 + ob2;
	ob1.show();	// visualizza 15 50

	return 0;
}
